package middleware

import (
	"GoControalBackend/common/constant"
	"GoControalBackend/common/result"
	"github.com/gin-gonic/gin"
	"strings"
)

// AuthMiddleware 鉴权中间件
func AuthMiddleware() func(c *gin.Context) {
	// 返回一个中间件函数，用于处理认证逻辑
	return func(c *gin.Context) {
		// 从请求头中获取Authorization字段
		authHeader := c.Request.Header.Get("Authorization")

		// 如果Authorization字段为空
		if authHeader == "" {
			// 返回失败结果，状态码为NOAUTH，消息为NOAUTH对应的错误信息
			result.Failure(c, int(result.ApiCode.NOAUTH), result.ApiCode.GetMessage(result.ApiCode.NOAUTH))
			// 终止当前请求处理
			c.Abort()
			return
		}

		// 将Authorization字段按空格分割成两部分
		parts := strings.SplitN(authHeader, " ", 2)
		// 如果分割后的部分不等于2或第一部分不是"Bearer"
		if !(len(parts) == 2 && parts[0] == "Bearer") {
			// 返回失败结果，状态码为AUTHFORMATERROR，消息为AUTHFORMATERROR对应的错误信息
			result.Failure(c, int(result.ApiCode.AUTHFORMATERROR), result.ApiCode.GetMessage(result.ApiCode.AUTHFORMATERROR))
		}

		// todo : 校验当前登录传入的 Token
		var token = "token"
		// 将Token设置到上下文中
		c.Set(constant.ContextKeyUser, token)
		// 继续处理下一个中间件或路由
		c.Next()
	}
}
